// 散列

// 
let arr = [2,3,234,453245345,6,23,4,3456,24,332,56,435,67,875,234,1,452,4];

// 判断：3821是不是在arr数组中？
// if (arr.indexOf(3821) != -1) {
//     console.log("存在")
// }
// for (let i = 0;i < arr.length;i ++) {
//     // OK
// }

// 时间复杂度：
// 最悲剧的情况：要把数组遍历完成，才能判断出是否存在
// 如果数组有1000位，那么最悲剧的情况就是要判断1000次。
// 所以效率非常低！

// 如何提高效率，快速判断出3821是否在集合中

// 数组中有5,10,20

let arr2 = [];
arr2[5] = true;
arr2[10] = true;
arr2[20] = true;

if (arr2[3821] === true) {
    console.log("存在")
}

// 5,10,20 => 不是一段连续的内存空间 => 散列

// 目前的缺陷：
// 内存中要开辟3821个空间：
// arr[32187348907198371982379812] = true;

// 散列函数：hashCode()
// 63部的同学
let stu = {
    age: 20,
    name: "赵馨雨"
}

// 得到age的方式来作为散列函数
// arr[stu.age] = stu;
arr = new Array(8);
[][][][][][][][赵馨雨,陈科地,龙雪]


// 班上20岁的同学可能非常多
// 散列冲突：散列函数得到的值一样，导致都放在同一个位置上了
// 尽量避免散列冲突：良好的散列函数（所有元素尽量均分到桶（bunker）中，尽量减少散列冲突）
//   解决散列冲突：数组（链表），红黑树

// 散列的知识（课外扩展数据结构知识）